package logica;

import java.util.Enumeration;
import java.util.Hashtable;

public class ServicioLogin {
	
	private static Hashtable<String, String> usuarios = null;
	
	/* metodo constructor, crea el hashtable vacio */
	public synchronized void ServicioLoginInit ( ){
		if(usuarios==null)
			ServicioLogin.usuarios = new Hashtable<String, String>();
	}

	/* verifica si existe el usuario en el hashtable */
	public boolean existsUser (String name){
		this.ServicioLoginInit();
		boolean v = false;
		synchronized (ServicioLogin.usuarios){
			v = ServicioLogin.usuarios.containsKey(name);
		}
		return v;
	}
	
	/* agrega el nuevo usuario y password al hashtable */
	/* Precondicion: el usuario no existe en el hashtable */
	public void createUser (String name, String pwd){
		this.ServicioLoginInit();
		synchronized (ServicioLogin.usuarios){
			ServicioLogin.usuarios.put(name, pwd);
		}
	}
	
	/* borra el usuario del hashtable */
	/* Precondicion: el usuario existe en el hashtable */
	public void removeUser (String name){
		this.ServicioLoginInit();
		synchronized (ServicioLogin.usuarios){
			ServicioLogin.usuarios.remove(name);
		}
	}
	
	/* verifica si el usuario existe en el hashtable. En caso de */
	/* ser asi, valida su password. Devuelve true solo si se */
	/* trata de un usuario y una password validos */
	public boolean validateUser (String name, String pwd){
		this.ServicioLoginInit();
		boolean v = false;
		synchronized (ServicioLogin.usuarios){
			if (ServicioLogin.usuarios.containsKey(name)){ //Si llamo al metodo exist user se va a lockear
				v = ServicioLogin.usuarios.get(name).equals(pwd); 
			}
		}
		return v;
	}
	
	/* devuelve un String conteniendo todos los nombres de */
	/* usuarios del hashtable, separados mediante comas */
	public String listUsers ( ){
		this.ServicioLoginInit();
		StringBuffer  ret = new StringBuffer();
		synchronized (ServicioLogin.usuarios){
			Enumeration<String> it = ServicioLogin.usuarios.keys();
			while( it.hasMoreElements() ) {
			  String name = it.nextElement();
			  ret.append(name + ",");
			}
		}
		if (ret.length() > 0){
			ret.substring(0, ret.length() - 1 ).toString(); //Quito la ultima comita
		}
		return ret.toString();
	}
	
	
}
